
/*--------------------------------------------------------------------------
  
　リアル戦闘_ユニットY座標変更

■概要
　リアル戦闘で表示されるユニットのY座標を変更する事が出来ます
　（アニメーションを弄らずに上下位置を補正します）

　本プラグイン内の設定にある「var RealPositionHoseiY = 0;」の0を弄る事でリアル戦闘で表示されるユニットのY座標が変わります。
　（マイナスなら上に、プラスなら下にずらして表示されます）
　ダメージポップアップやエフェクトの位置も同じようにずれます。


■注意事項
　　リアル戦闘_間接攻撃の位置補正.jsとは競合しますので同時に使わないでください


19/12/15  新規作成
21/06/27  1.235対応


■対応バージョン
　SRPG Studio Version:1.235


■規約
・利用はSRPG Studioを使ったゲームに限ります。
・商用・非商用問いません。フリーです。
・加工等、問題ありません。どんどん改造してください。
・クレジット明記無し　OK
・再配布、転載　OK
・SRPG Studio利用規約は遵守してください。
  
--------------------------------------------------------------------------*/


(function() {

//-------------------------------------------------------
// 設定
//-------------------------------------------------------
var RealPositionHoseiY = 0;			// リアル戦闘時のBattlerY座標補正値（マイナスなら上に、プラスなら下に移動）




//-------------------------------------------------------
// 以下、プログラム
//-------------------------------------------------------

//----------------------------------
// BaseBattlerクラス
//----------------------------------
var alias01 = BaseBattler.drawBattler;
BaseBattler.drawBattler= function(xScroll, yScroll) {
		
		// Battlerの表示Y座標を補正
		alias01.call(this, xScroll, yScroll - RealPositionHoseiY)
}


var alias10 = BaseBattler.getEffectPos;
BaseBattler.getEffectPos= function(anime) {
		var pos = alias10.call(this, anime);
		
		// エフェクトの表示Y座標を補正（1.234まではこれで求めているらしい）
		pos.y = pos.y + RealPositionHoseiY;
		
		return pos;
}


var alias11 = BaseBattler.getCenterPos;
BaseBattler.getCenterPos= function(effectWidth, effectHeight) {
		var pos = alias11.call(this, effectWidth, effectHeight);
		
		// ポップアップの表示Y座標を補正
		pos.y = pos.y + RealPositionHoseiY;
		
		return pos;
}




//----------------------------------
// RealEffectクラス
//----------------------------------
// 1.235で追加された関数（1.235以降はエフェクトの位置をここで計算する模様）
var alias20 = RealEffect.updateKeyPos;
RealEffect.updateKeyPos= function() {
		alias20.call(this);
		
		if (!this._isCurrentFrameCheck()) {
			return;
		}
		
		// エフェクトの表示Y座標を補正（1.235以降はこれで求めているらしい）
		this._motion._yKey += RealPositionHoseiY;
}




//----------------------------------
// AnimeSimpleクラス
//----------------------------------
AnimeSimple._drawSprite= function(x, y, width, height, pic, isAbsolute, isRight, xSrc, ySrc, srcWidth, srcHeight, animeCoordinates) {
		var xDest, yDest, dx, dy;
		
		// xDest算出処理
		if (isAbsolute) {
			dx = 0;
		}
		else {
			// 中心からのずれを計算する
			dx = animeCoordinates.xCenter - x;
		}
		if (!isRight) {
			// 向きが異なるため、ずれる方向を変える
			dx *= -1;
			// キースプライトを基準にずらす
			dx += width - animeCoordinates.keySpriteWidth;
		}
		
		// 描画予定だった位置(xBase)にずれを加算
		xDest = animeCoordinates.xBase - dx;
		
		// yDest算出処理（isAbsoluteに関係なく同じにする）
		dy = animeCoordinates.yCenter - animeCoordinates.yBase;
//		if (isAbsolute) {
//			dy = 0;
//		}
//		else {
//			dy = animeCoordinates.yCenter - animeCoordinates.yBase;
//		}
		// 描画予定だった位置(yBase)にずれを加算
		yDest = y - dy;
		
		pic.drawStretchParts(xDest + animeCoordinates.dx, yDest + animeCoordinates.dy, width, height, xSrc * srcWidth, ySrc * srcHeight, srcWidth, srcHeight);
}




//----------------------------------
// AnimeMotionクラス
//----------------------------------
AnimeMotion._updatePos= function() {
		var i, count, x, width, keyIndex;
		var isAbsolute = this._animeData.isAbsoluteMotion(this._motionId);
		
		if (root.getScriptVersion() >= 1235 && this._realEffect !== null) {
			this._realEffect.updateKeyPos();
		}
		
		if (isAbsolute) {
			keyIndex = this._getSpriteIndexFromSpriteType(SpriteType.KEY, this._frameIndex);
			count = this._animeData.getSpriteCount(this._motionId, this._frameIndex);
			for (i = 0; i < count; i++) {
				x = this._animeData.getSpriteX(this._motionId, this._frameIndex, i);
				if (!this._animeRenderParam.isRight) {
					width = this._animeData.getSpriteWidth(this._motionId, this._frameIndex, keyIndex);
					this._xBase[i] = (GraphicsFormat.BATTLEBACK_WIDTH - width) - x;
				}
				else {
					this._xBase[i] = x;
				}
				this._xBase[i] += this._getHorzOffset(this._animeRenderParam.isRight);
				
				// _yBaseの算出処理をisAbsoluteがfalseの場合と同じにする
//				this._yBase[i] = this._animeData.getSpriteY(this._motionId, this._frameIndex, i);
				this._yBase[i] = this._yKey;
			}
		}
		else {
			count = this._animeData.getSpriteCount(this._motionId, this._frameIndex);
			for (i = 0; i < count; i++) {
				this._xBase[i] = this._xKey + this._getHorzOffset(this._animeRenderParam.isRight);
				this._yBase[i] = this._yKey;
			}
		}
}


})();